r"""
正则表达式

作用：
    在实际开发过程中经常会有查找符合某些复杂规则的字符串的需求， 比如：邮箱、url和手机号码等
    这时候想匹配或者查找符合某些规则的字符串就可以使用正则表达式了。

概念：
    正则表达式就是记录文本规则的代码

示例：
    0\d{2}-\d{8} 这个就是一个正则表达式，表达的意思是匹配的是座机号码

特点：
    - 正则表达式的语法很令人头疼，可读性很差
    - 正则表达式的通用性很强，能够适用于很多编程语言

语法：
    1.匹配单个字符
        - .   匹配除换行符之外任意单个字符，等价于[^\n\r]
        - []  匹配[]中列举的字符
        - [^] 匹配[]中列举的字符以外的字符
        - \d  匹配0-9的数字，等价于[0-9]
        - \D  匹配非0-9的数字，等价于[^0-9]
        - \s  匹配任意空白字符，等价于[\f\n\r\t\v]
        - \S  匹配任意非空白字符，等价于[^\f\n\r\t\v]
        - \w  匹配字母、数字、下划线和汉字，等价于[a-zA-Z0-9_汉字]
        - \W  匹配非字母、数字、下划线和汉字，等价于[^a-zA-Z0-9_汉字]

    2.匹配多个字符（限定符）
        - *     匹配前一个字符零次或多次，等价于{0,}
        - +     匹配前一个字符一次或多次，等价于{1,}
        - ?     匹配前一个字符零次或一次，等价于{0,1}
        - {m}   匹配前一个字符m次
        - {m,}  匹配前一个字符最少m次
        - {m,n} 匹配前一个字符最少m次最多n次

    3.匹配开头和结尾
        - ^ 匹配字符串开头
        - $ 匹配字符串结尾

    4.匹配分组
        |           匹配左右任意一个表达式
        (ab)        将括号中的表达式作为一个分组
        \num        引用分组num匹配到的字符串
        (?P<name>)  分组起别名
        (?P=name)   引用别名为name分组匹配到的字符串
总结：
    正则表达式是对字符串操作的一种匹配公式
"""
